import QQMapWX from 'static/sdk/qqmap-wx-jssdk.js'
import coordtransform from 'coordtransform'
const qqmapsdk = new QQMapWX({// 实例化API核心类
  key: process.env.QQMapKey// 必填
})

export function getPosition() {
  return new Promise((resolve, reject) => {
    wx.showLoading({
      title: '正在定位',
      mask: true
    })
    wx.getSetting({
      success(res) {
        // debugger
        // 判断用户是否授权过，
        // 未授权过、
        if (!res.authSetting['scope.userLocation']) {
          wx.authorize({
            scope: 'scope.userLocation',
            success(res) {
              // 用户允许 查看自己的位置
              wx.getLocation({
                type: 'wgs84',
                success: function(res) {
                  // 2、根据坐标获取当前位置名称，显示在顶部:腾讯地图逆地址解析
                  const [longitude, latitude] = coordtransform.wgs84togcj02(res.longitude, res.latitude)// 国内坐标转换
                  let obj = {
                    latitude: latitude,
                    longitude: longitude
                  }
                  qqmapsdk.reverseGeocoder({
                    success: function(res) {
                      Object.assign(obj, res.result.address_component)
                      wx.setStorageSync('currentPosition_latitude', obj.latitude)
                      wx.setStorageSync('currentPosition_longitude', obj.longitude)
                      resolve(obj)
                    },
                    fail: function(res) {
                      reject(res)
                    },
                    complete: function(res) {
                      reject(res)
                    }
                  })
                },
                fail: function(err) {
                  reject(err)
                }
              })
            },
            fail(err) {
              reject(err)
            }
          })
        } else {
          // 授权过
          wx.getLocation({
            // type: 'wgs84',
            success: function(res) {
              // 2、根据坐标获取当前位置名称，显示在顶部:腾讯地图逆地址解析
              const [longitude, latitude] = coordtransform.wgs84togcj02(res.longitude, res.latitude)// 国内坐标转换
              let obj = {
                latitude: latitude,
                longitude: longitude
              }
              qqmapsdk.reverseGeocoder({
                success: function(res) {
                  Object.assign(obj, res.result.address_component)
                  wx.setStorageSync('currentPosition_latitude', obj.latitude)
                  wx.setStorageSync('currentPosition_longitude', obj.longitude)
                  resolve(obj)
                },
                fail: function(res) {
                  reject(res)
                },
                complete: function(res) {
                  reject(res)
                }
              })
            },
            fail: function(err) {
              reject(err)
            }
          })
        }
      },
      fail(err) {
        reject(err)
      },
      complete: function(res) {
        wx.hideLoading()
      }
    })
  })
}

// 获取路线
export function callMapWay(querydata) {
  return new Promise((resolve, reject) => {
    wx.showLoading({
      title: '获取路线',
      mask: true
    })
    // 获取路线
    qqmapsdk.direction({
      mode: 'driving', // 可选值：'driving'（驾车）、'walking'（步行）、'bicycling'（骑行），不填默认：'driving',可不填
      // from参数不填默认当前地址
      from: querydata.fromdz,
      to: querydata.todz,
      success: function(res) {
        console.log(res)
        var ret = res
        var coors = ret.result.routes[0].polyline
        var pl = []
        // 坐标解压（返回的点串坐标，通过前向差分进行压缩）
        var kr = 1000000
        for (var i = 2; i < coors.length; i++) {
          coors[i] = Number(coors[i - 2]) + Number(coors[i]) / kr
        }
        // 将解压后的坐标放入点串数组pl中
        for (i = 0; i < coors.length; i += 2) {
          pl.push({ latitude: coors[i], longitude: coors[i + 1] })
        }
        console.log(pl)
        console.log('callMapWay function.')
        resolve(pl)
      },
      fail: function(error) {
        reject(error)
      },
      complete: function(res) {
        wx.hideLoading()
      }
    })
  })
}

// 调用距离计算接口
export function calCulateDistance(maker) {
  // 调用距离计算接口
  return new Promise((resolve, reject) => {
    // wx.showLoading({
    //   title: '计算距离',
    //   mask: true
    // })
    qqmapsdk.calculateDistance({
      // mode: 'driving',//可选值：'driving'（驾车）、'walking'（步行），不填默认：'walking',可不填
      // from参数不填默认当前地址
      // 获取表单提交的经纬度并设置from和to参数（示例为string格式）
      from: maker.fromdz, // 若起点有数据则采用起点坐标，若为空默认当前地址
      to: maker.todz, // 终点坐标
      success: function(res) { // 成功后的回调
        console.log(res)
        resolve(res)
      },
      fail: function(error) {
        reject(error)
      },
      complete: function(res) {
        // wx.hideLoading()
      }
    })
  })
}

// 获取地点附近的位置信息
export function getNearbyLocation(param) {
  return new Promise((resolve, reject) => {
    let option = Object.assign({
      success: function(res) { // 搜索成功后的回调
        resolve(res.data)
      },
      fail: function(res) {
        reject(res)
      },
      complete: function(res) {
        console.log(res)
      }
    }, param)
    qqmapsdk.search(option)
  })
}

export function atuoGetLocation(param) {
  return new Promise((resolve, reject) => {
    qqmapsdk.geocoder({
      address: param, // 用户输入的地址（注：地址中请包含城市名称，否则会影响解析效果），如：'北京市海淀区彩和坊路海淀西大街74号'
      complete: res => {
        console.info('经纬度')
        console.log(res.result.location) // 经纬度对象
        const [longitude, latitude] = coordtransform.wgs84togcj02(res.result.location.lng, res.result.location.lat)// 国内坐标转换
        let obj = {
          latitude: latitude,
          longitude: longitude
        }
        qqmapsdk.reverseGeocoder({
          success: function(res) {
            Object.assign(obj, res.result.address_component)
            wx.setStorageSync('currentPosition_latitude', obj.latitude)
            wx.setStorageSync('currentPosition_longitude', obj.longitude)
            resolve(obj)
          },
          fail: function(res) {
            reject(res)
          },
          complete: function(res) {
            reject(res)
          }
        })
      },
      fail: function(err) {
        reject(err)
      }
    })
  })
}
